class Line;

class Engine
{
public:
	Engine(){}
	Engine(vector<Line*> *operations, vector<Operand*> *operands, int max_clock)
	{
		this->operations = operations;
		this->operands = operands;
		this->max_clock = max_clock;
	}
	~Engine(){}
	
	void Clock(int cycle);
	void UpdateStates(int cycle);
	void PrintTrace(int cycle);
	void Execution(int cycle);
	void Simulate();

private:
	vector<Line*> *operations;
	vector<Operand*> *operands;
	int max_clock;
};
